import java.util.Scanner;

public class homework_1 {
    public static void main(String[] args){
        int year,month,day;
        int check_first,check_second;
        Scanner input=new Scanner(System.in);
        System.out.println("请输入要检验的身份证号");
        String id = input.next();
        if(id.length()!=18){//长度正确是第一检测点
            System.out.println("位数不对，你输入的不是一个身份证号");
            return;
        }
        for(int i=0;i<17;i++){//看看前17位有没有不是数字的
            if(!Character.isDigit(id.charAt(i))){
                System.out.println("号码中有不正确的输入，你输入的不是一个身份证号");
                return;
            }
        }
        if(!Character.isDigit(id.charAt(17))&&!(id.charAt(17)=='x')&&!(id.charAt(17)=='X')){//最后一位
            System.out.println("号码中有不正确的输入，你输入的不是一个身份证号");
            return;
        }
        year=1000*((int)id.charAt(6)-'0')+100*((int)id.charAt(7)-'0')+10*((int)id.charAt(8)-'0')+((int)id.charAt(9)-'0');
        month=10*((int)id.charAt(10)-'0')+((int)id.charAt(11)-'0');
        day=10*((int)id.charAt(12)-'0')+((int)id.charAt(13)-'0');
        if(month<1||month>12){//月份不能太离谱
            System.out.println("月份不合理，你输入的不是一个身份证号");
            return;
        }
        if(has31Days(month)){
            if(day<1||day>31){
                System.out.println("日期不合理，你输入的不是一个身份证号");
                return;
            }
        }
        else{
            if(month==2){
                if(isLeapYear(year)){
                    if(day<1||day>29){
                        System.out.println("日期不合理，你输入的不是一个身份证号");
                        return;
                    }
                }
                else {
                    if(day<1||day>28){
                        System.out.println("日期不合理，你输入的不是一个身份证号");
                        return;
                    }
                }
            }
            else{
                if(day<1||day>30){
                    System.out.println("日期不合理，你输入的不是一个身份证号");
                    return;
                }
            }
        }
        check_first=7*((int)id.charAt(0)-'0')+9*((int)id.charAt(1)-'0')+10*((int)id.charAt(2)-'0')+
                5*((int)id.charAt(3)-'0')+8*((int)id.charAt(4)-'0')+4*((int)id.charAt(5)-'0')+
                2*((int)id.charAt(6)-'0')+((int)id.charAt(7)-'0')+6*((int)id.charAt(8)-'0')+
                3*((int)id.charAt(9)-'0')+7*((int)id.charAt(10)-'0')+9*((int)id.charAt(11)-'0')+
                10*((int)id.charAt(12)-'0')+5*((int)id.charAt(13)-'0')+8*((int)id.charAt(14)-'0')+
                4*((int)id.charAt(15)-'0')+2*((int)id.charAt(16)-'0');//校验码第一步
        check_second=check_first%11;
        if(outputCheckNumber(check_second)=='e'){
            System.out.println("程序错误");
            return;
        }
        if(outputCheckNumber(check_second)=='X'){
            if(Character.toUpperCase(id.charAt(17))!=outputCheckNumber(check_second)){
                System.out.println("校验码错误，你输入的不是一个身份证号");
                return;
            }
        }
        else{
            if(id.charAt(17)!=outputCheckNumber(check_second)){
                System.out.println("校验码错误，你输入的不是一个身份证号");
                return;
            }
        }
        System.out.println("你输入的是一个身份证号");
    }
    public static boolean isLeapYear(int year){
        if(year%100==0){
            if(year%400==0){
                return true;
            }
            else{
               return false;
            }
        }
        else if(year%4==0){
            return true;
        }
        else {
            return false;
        }
    }
    public static boolean has31Days(int month){
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
            return true;
        }
        else {
            return false;
        }
    }
    public static char outputCheckNumber(int input){
        switch (input){
            case 0:{
                return '1';
            }
            case 1:{
                return '0';
            }
            case 2:{
                return 'X';
            }
            case 3:{
                return '9';
            }
            case 4:{
                return '8';
            }
            case 5:{
                return '7';
            }
            case 6:{
                return '6';
            }
            case 7:{
                return '5';
            }
            case 8:{
                return '4';
            }
            case 9:{
                return '3';
            }
            case 10:{
                return '2';
            }
            default:{
                return 'e';
            }
        }
    }
}
